package com.alter.system;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alter.global.base.ArticleSearchVO;
import com.alter.global.base.article.service.ArticleCenterService;
import com.alter.model.SeNavBar;
import com.alter.orm.Page;
import com.alter.system.service.SysUIService;

/**
 * 
 * 后台管理的UI 控制。
 * 
 * @author A_Alter
 */
@Controller
@RequestMapping("/manage")
public class BaseSystemUiAction {

    @Autowired(required = true)
    private SysUIService sysuiservice;

    @Autowired(required = true)
    private ArticleCenterService articleservice;

    /**
     * 文章中心 
     * 
     * @return
     * @other view 中目录名字还写错了,哎不改了。
     */
    @RequestMapping("/article")
    public String articleCenter(ArticleSearchVO searchVO, Model model, HttpServletRequest request) {
	model.addAttribute("list", articleservice.find(searchVO));
	model.addAttribute("navbars", sysuiservice.getSysNavBarList());
	model.addAttribute("url", Page.getFullRequestPath(request, "p"));
	return "manage/articalcenter";
    }

    /**
     * 导航管理
     * 
     * @return
     */
    @RequestMapping("/config")
    public String navigationCenter(Model model) {
	model.addAttribute("curnav", "4");
	// model.addAttribute("rightNavList",
	// sysuiservice.getRightNavList("4"));
	model.addAttribute("navtree", sysuiservice.getsystemNavTree(null));
	return "manage/config";
    }

    /**
     * ajax(不要设定ajax的accept 会导致参数绑定失效 ---
     * 这点可能与AJAX框架相冲突，spring会自行判断哪个消息转换器能够处理当前control 方法的返回值) 更新 SE_NAV
     */
    @RequestMapping(value = "/updnode", method = RequestMethod.POST)
    @ResponseBody
    public SeNavBar updateSeNav(SeNavBar bar) {
	sysuiservice.updateSeNav(bar);
	// 不使用 HIBERNATE 操作过后的类作为返回值,会导致JSON 解析出错。
	return bar;
    }

    /**
     * 创建 导航 ajax 和update 不同的返回值 主要想感受下那种返回值更加适合 ajax.
     * 
     * @param bar
     * @return
     */
    @RequestMapping(value = "/addnode")
    @ResponseBody
    public SeNavBar createSeNav(SeNavBar bar) {
	sysuiservice.createSeNav(bar);
	// 提示信息可以从配置文件中读取。 可以管控
	return bar;
    }

    /**
     * <p>
     * 删除导航
     * </p>
     * 
     * <pre>
     *  不提供有子节点的NODE删除。
     * </pre>
     * 
     * @param bar
     */
    @RequestMapping(value = "/delnode")
    @ResponseBody
    public String dropSeNav(SeNavBar bar) {
	sysuiservice.delSeNav(bar);
	// 提示信息可以从配置文件中读取。 可以管控
	return "success info";
    }

}
